package E_2024;

import java.util.*;
/*
    题目描述
        主管期望你来实现英文输入法单词联想功能。
    需求如下：
        依据用户输入的单词前缀，从已输入的英文语句中联想出用户想输入的单词，按字典序输出联想到的单词序列，
        如果联想不到，请输出用户输入的单词前缀。
        注意：
        英文单词联想时，区分大小写
        缩略形式如”don’t”，判定为两个单词，”don”和”t”
        输出的单词序列，不能有重复单词，且只能是英文单词，不能有标点符号
    输入描述
        输入为两行。
        首行输入一段由英文单词word和标点符号组成的语句str；
        接下来一行为一个英文单词前缀pre。
        0 < word.length() <= 20
        0 < str.length <= 10000
        0 < pre <= 20
    输出描述
        输出符合要求的单词序列或单词前缀，存在多个时，单词之间以单个空格分割
 */
public class E_100_17 {
    public static void main(String[] args) {
        System.out.println(ans("hello ! My name is Alice. What you hame? Can i friend you?", "h"));
    }
    public static Set<String> ans(String str, String pre){
        Map<String, Set<String>> map = new HashMap<>();
        int left = 0;
        for (int i = 0; i < str.length();) {
            char ch = str.charAt(i);
            if (ch >= 'a' && ch <= 'z') i++;
            else if (ch >= 'A' && ch <= 'Z') i++;
            else {
                String temp = str.substring(left,i++);
                String x = str.substring(left, left + pre.length());
                Set<String> set = map.getOrDefault(x, new HashSet<>());
                set.add(temp);
                map.put(x,set);
                left = i;
            }
        }
        return map.get(pre);
    }
}
